import { useMap } from 'ahooks';
import type { ColumnsType } from 'antd/es/table';
import type { TableRowSelection } from 'antd/es/table/interface';
import Source from '../Entity/Source';

/**
 * @desc 表单提供的查询条件
 */
export type SearchForm = {
  name: string;
  resourceName?: string;
  /**
   * @desc 课件类型
   */
  coursewareGroup: string;
  /**
   * @desc 行业
   */
  trade: string;
  /**
   * @desc 分类id
   */
  classId: string;
};

export interface MainSearchTableProps {
  /**
   * @desc 获取表格请求方式
   */
  tableRequest?(
    pageIndex: number,
    pageSize: number,
    params: Partial<SearchForm>,
  ): Promise<{ list: Source[]; total: number }>;

  /**
   * @desc 获取列表字段配置
   */
  getColumns?(): ColumnsType<Source>;

  /**
   * @desc 设置表格选择的交互行为。
   */
  getRowSelection?(
    value: MainSearchTableProps['value'],
    valueSet: MainSearchTableProps['valueSet'],
    currentDataSource: Source[],
  ): TableRowSelection<Source>;

  /**
   * @desc 获取查询字段的内容,只能根据现有的进行选择。目前只提供四种
   */
  searchFields?: (keyof SearchForm)[];

  value?: ReturnType<typeof useMap<string, Source>>[0];

  valueSet?: ReturnType<typeof useMap<string, Source>>[1];
}
